package cn.yj.syslog.entity;

import cn.yj.common.BaseEntity;
import cn.yj.commons.utils.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.Map;
import java.util.StringJoiner;

/**
 * <br>
 *
 * @author 永健
 * @since 2020-12-17 17:15
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tb_sys_log")
public class SysLog extends BaseEntity
{
    public final static String APP="小程序";
    public final static String ADMIN="管理端";
    /**
     * 日志类型 0:info，1:error
     */
    private String type;

    /**
     * 操作类型 LogType
     */
    private String operateType;

    private String sourceDevice;

    /**
     * 功能说明
     */
    private String descr;

    /**
     * 主机
     */
    private String host;

    /**
     * 地点
     */
    private String ipAddress;

    /**
     * 请求url
     */
    private String url;

    /**
     * 方法
     */
    private String method;


    private String contentType;

    /**
     * request请求参数
     */
    private String params;

    /**
     * 接口接收到的参数
     */
    private String methodParams;

    /**
     * 请求体的参数
     */
    private String requestBodyParams;


    /**
     * 异常信息
     */
    private String errorMsg;

    /**
     * 操作人
     */
    private String operUser;


    /**
     * 操作浏览器
     */
    private String browser;


    /**
     * 操作系统
     */
    private String sys;

    /**
     * 响应结果
     */
    private Object result;


    /**
     * 请求耗时
     */
    private Long takeTime;

    public SysLog(String id)
    {
        super.setId(id);
    }

    public SysLog()
    {
    }

    public String getMapToParams(Map<String, String[]> paramMap)
    {
        if (paramMap == null)
        {
            return "";
        }

        return JSON.toJSONString(paramMap);

//        StringBuilder params = new StringBuilder();
//        for (Map.Entry<String, String[]> param : paramMap.entrySet())
//        {
//            params.append(("".equals(params.toString()) ? "" : " , ") + param.getKey() + "=");
//            String paramValue = (param.getValue() != null && param.getValue().length > 0 ? param.getValue()[0] : "");
//            params.append(StringUtils.abbr(StringUtils.endsWithIgnoreCase(param.getKey(), "password") ? "" : paramValue,
//                    100));
//        }
//        return params.toString();
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", SysLog.class.getSimpleName() + "\n[\n", "\n]")
                .add("   -- type='" + type + "'")
                .add("\n   -- descr=" + descr + "")
                .add("\n   -- host='" + host + "'")
                .add("\n   -- ipAddress='" + ipAddress + "'")
                .add("\n   -- url='" + url + "'")
                .add("\n   -- method='" + method + "'")
                .add("\n   -- errorMsg=" + errorMsg + "")
                .add("\n   -- browser='" + browser + "'")
                .add("\n   -- sys='" + sys + "'")
                .add("\n   -- operateUser='" + operUser + "'")
                .add("\n   -- sourceDevice='" + sourceDevice + "'")
                .add("\n   -- operateType=" + operateType + "")
                .add("\n   -- contentType=" + contentType + "")
                .add("\n   -- requestParams=" + params + "")
                .add("\n   -- methodParams=" + methodParams + "")
                .add("\n   -- requestBodyParams=" + requestBodyParams + "")
                .add("\n   -- result=" + result + "")
                .add("\n   -- takeTime=" + takeTime + "/ms")
                .toString();
    }
}
